//#include<cstdio>
//#include<iostream>
//#include<algorithm>
//#include<climits>
//#define ll long long
//// 二分
//using namespace std;
//const int N = 1e5 + 10;
//ll n, k, a[N], l, r;
//ll check(ll x)
//{
//	ll sum = 0, res = 0;
//	for (int i = 1; i <= n; i++) {
//		sum += a[i];
//		sum = max(0ll, sum);
//		if (sum >= x) {
//			res ++;
//			sum = 0;
//		}
//	}
//	return res;
//}
//int main()
//{
//	cin >> n >> k;
//	for (int i = 1; i <= n; i++) {
//		cin >> a[i];
//	}
//	l = 1, r = LONG_LONG_MAX;
//	ll maxx = LONG_LONG_MIN, minn = LONG_LONG_MAX;
//	while (l <= r) {
//		ll mid = (l + r) >> 1;
//		ll tmp = check(mid);
//		if (tmp >= k) {
//			l = mid + 1;
//			if (tmp == k ) {
//				maxx = mid;
//			}
//		} else {
//			r = mid - 1;
//		}
//	}
//	l = 1, r = LONG_LONG_MAX;
//
//	while (l <= r) {
//		ll mid = (l + r) >> 1;
//		ll tmp = check(mid);
//		if (tmp > k) {
//			l = mid + 1;
//		} else {
//			if (tmp == k) {
//				minn = mid;
//			}
//			r = mid - 1;
//
//		}
//	}
//	if (maxx == LONG_LONG_MIN || minn == LONG_LONG_MAX) {
//		cout << "-1";
//	} else {
//		cout << minn << " " << maxx;
//	}
//	return 0;
//
//}// 1 WA
#include <bits/stdc++.h>
#define MAX (100000 + 7)
#define long long long
using namespace std;

int N, k, a[MAX];
long l, r, ans1 = -1, ans2 = -1;

// 计算满足条件的子数组个数
long work(long im)
{
	int ans = 0; long sum = 0;
	for (int i = 1; i <= N; i++)
	{
		sum = max(sum + a[i], 0ll);
		if (sum >= im) sum = 0, ans++;
	}
	return ans;
}

int main()
{
	scanf("%d%d", &N, &k);
	for (int i = 1; i <= N; i++)
		scanf("%d", a + i);
	l = 1, r = 1e18; // 注意 l 应设为1
	while (l <= r)
	{
		long mid = (l + r) >> 1;
		if (work(mid) <= k)
		{
			r = mid - 1;
			if (work(mid) == k) ans1 = mid; // 注意符合条件才更新答案
		}
		else l = mid + 1;
	}
	
	l = 1, r = 1e18; // 注意 l 应设为1
	while (l <= r)
	{
		long mid = (l + r) >> 1;
		if (work(mid) >= k)
		{
			l = mid + 1;
			if (work(mid) == k) ans2 = mid; // 注意符合条件才更新答案
		}
		else r = mid - 1;
	}
	if (ans1 == -1) puts("-1");
	else printf("%lld %lld\n", ans1, ans2);
}
